/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projeto.voztg.pkg2.pkg0;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 *
 * @author cris
 */
public class Config {

    private static Properties wordsReplaceFileProperties;
    private static int timeLetra;//variavel que rege o tempo da mudança das letras
    private static int timeOpcoes;//variavel que rege o tempo da mudança das opções
    private static int qtOpcoes;
    private static int qtRepeticoes;
    private static File VozSelecionada;//variavel que indica qual é a voz selecionada
    private static String Nome_Arq_Replace = "words.properties";//nome do arquivo das palavras de reposição
    private static String CaminhoOutput = "c:/recursos/output/";//nome do arquivo das palavras de reposição
    

    public static String getNome_Arq_Replace() {
        return Nome_Arq_Replace;
    }

    public static String getCaminhoOutPut() {
        return CaminhoOutput;
    }

    public static int getQtRepeticoes() {
        return qtRepeticoes;
    }
    
    

    public static int getTimeLetra() {
        return timeLetra;
    }

    public static int getQtOpcoes() {
        return qtOpcoes;
    }

    public static int getTimeOpcoes() {
        return timeOpcoes;
    }

    public static File getVozSelecionada() {
        return VozSelecionada;

    }

    public static void setQtRepeticoes(int _qtRepeticoes) {
        gravarVariavel("<QTRepet>", String.valueOf(_qtRepeticoes));
        qtRepeticoes = _qtRepeticoes;
    }

    public static void setQtOpcoes(int _qtOpcoes) {
        gravarVariavel("<QTOpcoes>", String.valueOf(_qtOpcoes));
        qtOpcoes = _qtOpcoes;

    }

    public static void setTimeLetra(int _timeLetra) {
        gravarVariavel("<timeLetras>", String.valueOf(_timeLetra));
        timeLetra = _timeLetra;

    }

    public static void setTimeOpcoes(int _timeOpcoes) {
        gravarVariavel("<timeOpcoes>", String.valueOf(_timeOpcoes));
        timeOpcoes = _timeOpcoes;


    }

    private static void gravarVariavel(String _chave, String _valor) {
        Erro.setErro(false);
        wordsReplaceFileProperties = new Properties();
        try {
            FileInputStream fiso = new FileInputStream(CaminhoOutput + Nome_Arq_Replace);
            wordsReplaceFileProperties.load(fiso);
            wordsReplaceFileProperties.remove(_chave);
            wordsReplaceFileProperties.setProperty(_chave, _valor);
            FileOutputStream fis = new FileOutputStream(CaminhoOutput + Nome_Arq_Replace);
            wordsReplaceFileProperties.store(fis, "alteracao ");
            fis.close();
            fiso.close();

        } catch (IOException ex) {
            Erro.setErro(ex.getMessage());
        }


    }

    public static void setVozSelecionada(String _VozSelecionada) {
        gravarVariavel("<VoiceSelected>", String.valueOf(_VozSelecionada));
        switch (_VozSelecionada) {
            case "BR1":
                VozSelecionada = MbrolaSint.VOICE_BR1;
                break;
            case "BR2":
                VozSelecionada = MbrolaSint.VOICE_BR2;
                break;
            case "BR3":
                VozSelecionada = MbrolaSint.VOICE_BR3;
                break;
            case "BR4":
                VozSelecionada = MbrolaSint.VOICE_BR4;
                break;
            default:
                VozSelecionada = MbrolaSint.VOICE_BR1;
                break;
        }

    }

    /**
     *
     */
    public static void CarregarConfiguracoes() {  //metodo para recuperar as configurações iniciais

        Erro.setErro(false);
        File arquivoWordReplace = new File(CaminhoOutput + Nome_Arq_Replace);
        if (arquivoWordReplace.exists() == true) {//verifica se o arquivo de configuração existe
            WordsReplace wordReplace = WordsReplace.getInstance();
            try {
                timeLetra = Integer.parseInt(wordReplace.getReplacedWord("<timeLetras>"));
            } catch (Exception e) {
                Erro.setErro(e.getMessage());
                return;
            }
            try {
                timeOpcoes = Integer.parseInt(wordReplace.getReplacedWord("<timeOpcoes>"));
            } catch (Exception e) {
                Erro.setErro("variavel não existe ");
                return;
            }

            try {
                qtRepeticoes = Integer.parseInt(wordReplace.getReplacedWord("<QTRepet>"));
            } catch (Exception e) {
                Erro.setErro("variavel não existe ");
                return;
            }

            try {
                qtOpcoes = Integer.parseInt(wordReplace.getReplacedWord("<QTOpcoes>"));
            } catch (Exception e) {
                Erro.setErro("variavel não existe");
                return;
            }
            String voz = wordReplace.getReplacedWord("<VoiceSelected>");

            switch (voz) {
                case "BR1":
                    VozSelecionada = MbrolaSint.VOICE_BR1;
                    break;
                case "BR2":
                    VozSelecionada = MbrolaSint.VOICE_BR2;
                    break;
                case "BR3":
                    VozSelecionada = MbrolaSint.VOICE_BR3;
                    break;
                case "BR4":
                    VozSelecionada = MbrolaSint.VOICE_BR4;
                    break;
                default:
                    VozSelecionada = MbrolaSint.VOICE_BR1;
                    break;
            }

        } else {//se o arquivo de configuracao não existir ele recria com valores default
            Erro.setErro("arquivo não existe");
            CriarConfiguracoes();
        }

    }

    public static void CriarConfiguracoes() {//se não achar os arquivos de configurações iniciais ele cria com valores default
        File arquivoWordReplace = new File(CaminhoOutput + Nome_Arq_Replace);
        if (arquivoWordReplace.exists() != true) {
            try {
                arquivoWordReplace.createNewFile();
            } catch (Exception e) {
                Erro.setErro(e.getMessage());
            }
            wordsReplaceFileProperties = new Properties();
            try {

                try (FileInputStream fiso = new FileInputStream(arquivoWordReplace)) {
                    wordsReplaceFileProperties.load(fiso);
                    wordsReplaceFileProperties.setProperty("<VoiceSelected>", "BR1");//grava na setList
                    wordsReplaceFileProperties.setProperty("<QTOpcoes>", "4");//grava na setList
                    wordsReplaceFileProperties.setProperty("vc", "voce");//grava na setList
                    wordsReplaceFileProperties.setProperty("<timeLetras>", "2000");//grava na setList
                    wordsReplaceFileProperties.setProperty("<timeOpcoes>", "2000");//grava na setList
                     wordsReplaceFileProperties.setProperty("<QTRepet>", "2");//grava na setList
                    FileOutputStream fis = new FileOutputStream(arquivoWordReplace);
                    wordsReplaceFileProperties.store(fis, "novo arquivo"); //grava a setList no arquivo
                    fis.close();
                }
            } catch (IOException ex) {
                Erro.setErro(ex.getMessage());
            }
        }


    }

    public static void CarregarArquivosDeSom() {
        Erro.setErro(false);
        for (int x = 0; x < LetrasENumeros.getQtLetter() - 1; x++) {
            File arquivoWordReplace = new File(CaminhoOutput + LetrasENumeros.getAllLetter(x) + ".wav");
            if (arquivoWordReplace.exists() != true) {
                Erro.setErro("arquivo não existe");
                CriarArquivosDeSom(VozSelecionada);
                break;
            }
        }
    }

    public static void CriarArquivosDeSom(File _VozSelecionada) {//metodo para criar os arquivos de som se estiverem faltando ou se mudar a voz

        try {
            for (int x = 0; x < 5; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getVogal(x)).to(LetrasENumeros.getVogal(x) + ".wav").speech();
            }

            for (int x = 0; x < 10; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getSons_Letras_Antes(x)).to(LetrasENumeros.getConsoanteAntes(x) + ".wav").speech();
            }

            for (int x = 0; x < 11; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getSons_Letras_Depois(x)).to(LetrasENumeros.getConsoanteDepois(x) + ".wav").speech();
            }

            for (int x = 0; x < 4; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getSons_Letras_Pontuacao(x)).to(LetrasENumeros.getSons_Letras_Pontuacao(x) + ".wav").speech();
            }

            for (int x = 0; x < 10; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getSons_Letras_Numerais(x)).to(LetrasENumeros.getSons_Letras_Numerais(x) + ".wav").speech();
            }

            for (int x = 0; x < 6; x++) {
                new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.getOpcoes(x)).to(LetrasENumeros.getOpcoes(x) + ".wav").speech();
            }

            new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.som_Saudacao).to(LetrasENumeros.nome_Arq_Saudacao + ".wav").speech();//arquivo de saudacao

            new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.som_Texto_apagado).to(LetrasENumeros.nome_Arq_Texto_apagado + ".wav").speech();//arquivo de saudacao
            new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.som_desfazer).to(LetrasENumeros.nome_Arq_Desfazer + ".wav").speech();//arquivo de saudacao
            new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.som_Modo_texto).to(LetrasENumeros.nome_Arq_Modo_texto + ".wav").speech();//arquivo modo de editor de texto
            new FurbSpeech().withVoice(_VozSelecionada).text(LetrasENumeros.som_Modo_discurso).to(LetrasENumeros.nome_Arq_Modo_discurso + ".wav").speech();//arquivo modo discurso
        } catch (Exception e) {
            Erro.setErro(e.getMessage().toString());
        }
    }
}